home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_02 / small / stkparam.cpp < prev    next >
C/C++ Source or Header  |  1994-07-18  |  1KB  |  56 lines

  1. /* Listing 3 */
  2.  
  3. template <class TYPE>
  4. inline TYPE max(TYPE x, TYPE y)
  5. { return (x > y) ? x : y; }
  6.  
  7. template <class ITEM, unsigned MAX_ITEMS = 5>
  8. class stack  {
  9.     ITEM * itemPtrs[MAX_ITEMS];
  10.     unsigned items;
  11.   public:
  12.     stack()  { items = 0U; }
  13.     int full() { return !(MAX_ITEMS - items); }
  14.     unsigned depth()  { return items; }
  15.     int push(ITEM * itemPtr);
  16.     ITEM * top()
  17.         { return (items? itemPtrs[items-1] : 0); }
  18.     ITEM * pop()
  19.         { return (items? itemPtrs[--items] : 0); }
  20. };
  21.  
  22. template <class ITEM, unsigned MAX_ITEMS>
  23. int stack<ITEM,MAX_ITEMS>::push(ITEM * itemPtr)
  24. {
  25.     if (!full() && itemPtr)  {
  26.         itemPtrs[items++] = itemPtr;
  27.         return 1;
  28.     }
  29.     return 0;
  30. }
  31.  
  32. #include <iostream.h>
  33. #include <iomanip.h>
  34.  
  35. main()
  36. {
  37.     stack<char> ToDo;
  38.  
  39.     ToDo.push("wash car");
  40.     ToDo.push("cut grass");
  41.     ToDo.push("buy groceries");
  42.     ToDo.push("cash paycheck");
  43.     while (ToDo.top())
  44.         cout << ToDo.pop() << endl;
  45.  
  46.     stack<int,10U> CountDown;
  47.  
  48.     for (int i = 1; CountDown.push(new int(i)); i++);
  49.     while (CountDown.top())  {
  50.         cout << *CountDown.top() << " ";
  51.         delete CountDown.pop();
  52.     }
  53.     cout << "Blast Off!" << endl;
  54.     return 0;
  55. }
  56.